package com.cskaoyan.recursion;

/*
        递归方法:  在方法体中自己调用自己的方法

        实现递归需要注意的问题：
         1. 递归一定要有出口！！
         2. 次数不能太多，否则就出现 stack overflow
 */
public class Demo1Defination {

    public static void main(String[] args) {
        // 调用递归方法(不带递归出口)
        //recurse(); // StackOverflowError

        // 递归方法必须有递归出口
        //recurseRight(3);

        // 如果在满足递归出口条件之前，经过了太多次的递归调用，也还是有可能发生
        // StackOverflowError

        int max = 0x7fffffff;
        recurseRight(max); //StackOverflowError

    }

    /*
         递归方法(自己调用自己)，错误的不带递归出口的
     */
    public static void recurse() {
        recurse();
    }

    public static void recurseRight(int n) {
        // 递归出口
        if (n <= 0) {
            return;
        }
        System.out.println("n = " + n );
        n--;

        // 自己调用自己
        recurseRight(n);

    }
}
